package com.hspedu.object;


/**
 * @Author Stringzhua
 * @Date 2024/3/2 21:03
 * description:面试题==和equals方法的区别
 * equals是Object类中的方法,只能判断引用类型
 * 默认判断的是地址是否相等,子类中往往重写该方法,用于i判断内容是否相等
 * 比如Integer,String[看看String和Integer的equals源代码]
 */
public class Object01 {
    public static void main(String[] args) {
        A a = new A();
        A b = a;
        A c = b;
        System.out.println(a == c);//true
        System.out.println(b == c);//true

        B bobj = a;
        System.out.println(bobj == c);//true

        int num1 = 10;
        double num2 = 10.0;
        System.out.println(num1 == num2);//基本数据类型,判断值是否相等

        //equals方法,源码如何查看
        //把光标放在equals方法上,直接输入ctrl+b /ctrl+左键也可以
        /*
        JDK源码
        String类的equals方法
        把Object的equals方法重写,变成了比较两个字符串值是否相等
        public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {//判断类型
            String anotherString = (String)anObject;//向下转型
            int n = value.length;
            if (n == anotherString.value.length) {//如果长度相同
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {//一个一个的比较字符
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;//如果两个字符串的所有字符都相同,则返回true
            }
        }
        return false;//如果比较的不是字符串则直接返回
    }
    * */
//        "hello".equals("abc");


//        Object
        //看看Object的equals方法
        /*
        * 即Object的equals方法默认就是比较对象的地址是否相同
        * 也就是判断两个对象是不是同一个对象
        * public boolean equals(Object obj) {//Object方法默认就是比较两个对象的地址是否相同
        return (this == obj);
    }
        * */

//        从源码中可以看到Integer也重写了Object的equals方法
        //变成了判断两个值是否相等
        /*
        *     public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
        * */
        Integer integer1 = new Integer(5);
        Integer integer2 = new Integer(5);
        System.out.println(integer1 == integer2);//false
        System.out.println(integer1.equals(integer2));//true

        String s = new String("zhuazhua");
        String s1 = new String("zhuazhua");
        System.out.println(s == s1);//false
        System.out.println(s.equals(s1));//true


    }
}

class A extends B {

}

class B {

}
